package com.zjsru.dailytest;

/**
 * @Author: likew
 * @Date: 2022/3/7
 * <p>
 * 数字转换为十六进制数
 * <p>
 * 输入: 26
 * <p>
 * 输出: "1a"
 */
public class toHex {
    //    /*直接调用toString方法*/
    //    public String toHex(int num) {
    //        return Integer.toHexString(num);
    //    }
    
    public String toHex(int num) {
        if (num == 0) {
            return "0";
        }
        long n = num;
        StringBuilder sb = new StringBuilder();
        //对于负数的 num，我们需要先在 num 基础上加上 2^32的偏移量，再进行进制转换。
        if (n < 0) {
            n = (long) (Math.pow(2, 32) + n);
        }
        while (n != 0) {
            long u = n % 16;
            char c = (char) (u + '0');
            if (u >= 10) {
                c = (char) (u - 10 + 'a');
            }
            sb.append(c);
            n = n / 16;
        }
        sb.reverse();
        return sb.toString();
    }
    
    public static void main(String[] args) {
        toHex toHex = new toHex();
        int num = 25;
        System.out.println(toHex.toHex(num));
    }
}
